package hut.game.actor;

import hut.game.unit.Chot;
import hut.game.unit.Ma;
import hut.game.unit.Phao;
import hut.game.unit.QuanCo;
import hut.game.unit.Sy;
import hut.game.unit.Tinh;
import hut.game.unit.Tuong;
import hut.game.unit.Xe;

import java.util.ArrayList;
import java.util.Random;

import android.view.View.OnTouchListener;

public class Player {
	public int Phe;
	public ArrayList<QuanCo> dsQuanCo;
	public Tuong qTuong;
	public Sy[] qSy = new Sy[2];
	public Tinh[] qTinh = new Tinh[2];
	public Xe[] qXe = new Xe[2];
	public Phao[] qPhao = new Phao[2];
	public Ma[] qMa = new Ma[2];
	public Chot[] qChot = new Chot[5];

	public Player(int x, OnTouchListener t) // Khoi tao cac quan co cho
											// NguoiChoi NguoiChoi NguoiChoi1 =
											// new NguoiChoi(1);
	{
		dsQuanCo = new ArrayList<QuanCo>();
		qTuong = new Tuong();
		qTuong.KhoiTaoListener(t);
		
		qSy[0] = new Sy();
		qSy[0].KhoiTaoListener(t);
		
		qSy[1] = new Sy();
		qSy[1].KhoiTaoListener(t);
		
		qTinh[0] = new Tinh();
		qTinh[0].KhoiTaoListener(t);
		
		qTinh[1] = new Tinh();
		qTinh[1].KhoiTaoListener(t);
		
		qXe[0] = new Xe();
		qXe[0].KhoiTaoListener(t);
		
		qXe[1] = new Xe();
		qXe[1].KhoiTaoListener(t);
		
		qPhao[0] = new Phao();
		qPhao[0].KhoiTaoListener(t);
		
		qPhao[1] = new Phao();
		qPhao[1].KhoiTaoListener(t);
		
		qMa[0] = new Ma();
		qMa[0].KhoiTaoListener(t);
		
		qMa[1] = new Ma();
		qMa[1].KhoiTaoListener(t);
		
		qChot[0] = new Chot();
		qChot[0].KhoiTaoListener(t);
		
		qChot[1] = new Chot();
		qChot[1].KhoiTaoListener(t);
		
		qChot[2] = new Chot();
		qChot[2].KhoiTaoListener(t);
		
		qChot[3] = new Chot();
		qChot[3].KhoiTaoListener(t);
		
		qChot[4] = new Chot();
		qChot[4].KhoiTaoListener(t);
		if (x == 0) {
			this.Phe = 0;
		} else {
			this.Phe = 1;
		}
		this.KhoiTao();
	}

	public void KhoiTao() {
		if (this.Phe == 0) {
			qTuong.KhoiTao(0, "tuong", "0", 1, false, 0, 4);
			qTuong.imgUnit.setId(0);
			dsQuanCo.add(qTuong);
			
			qSy[0].KhoiTao(0, "sy", "0", 2, false, 0, 3);
			qSy[0].imgUnit.setId(1);
			dsQuanCo.add(qSy[0]);
			
			qSy[1].KhoiTao(0, "sy", "1", 2, false, 0, 5);
			qSy[1].imgUnit.setId(2);
			dsQuanCo.add(qSy[1]);
			
			qTinh[0].KhoiTao(0, "tinh", "0", 2, false, 0, 2);
			qTinh[0].imgUnit.setId(3);
			dsQuanCo.add(qTinh[0]);
			
			qTinh[1].KhoiTao(0, "tinh", "1", 2, false, 0, 6);
			qTinh[1].imgUnit.setId(4);
			dsQuanCo.add(qTinh[1]);
			
			qXe[0].KhoiTao(0, "xe", "0", 2, false, 0, 0);
			qXe[0].imgUnit.setId(5);
			dsQuanCo.add(qXe[0]);
			
			qXe[1].KhoiTao(0, "xe", "1", 2, false, 0, 8);
			qXe[1].imgUnit.setId(6);
			dsQuanCo.add(qXe[1]);
			
			qPhao[0].KhoiTao(0, "phao", "0", 2, false, 2, 1);
			qPhao[0].imgUnit.setId(7);
			dsQuanCo.add(qPhao[0]);
			
			qPhao[1].KhoiTao(0, "phao", "1", 2, false, 2, 7);
			qPhao[1].imgUnit.setId(8);
			dsQuanCo.add(qPhao[1]);
			
			qMa[0].KhoiTao(0, "ma", "0", 2, false, 0, 1);
			qMa[0].imgUnit.setId(9);
			dsQuanCo.add(qMa[0]);
			
			qMa[1].KhoiTao(0, "ma", "1", 2, false, 0, 7);
			qMa[1].imgUnit.setId(10);
			dsQuanCo.add(qMa[1]);
		
			qChot[0].KhoiTao(0, "chot", "0", 2, false, 3, 0);
			qChot[0].imgUnit.setId(11);
			dsQuanCo.add(qChot[0]);
			
			qChot[1].KhoiTao(0, "chot", "1", 2, false, 3, 2);
			qChot[1].imgUnit.setId(12);
			dsQuanCo.add(qChot[1]);
			
			qChot[2].KhoiTao(0, "chot", "2", 2, false, 3, 4);
			qChot[2].imgUnit.setId(13);
			dsQuanCo.add(qChot[2]);
			
			qChot[3].KhoiTao(0, "chot", "3", 2, false, 3, 6);
			qChot[3].imgUnit.setId(14);
			dsQuanCo.add(qChot[3]);
			
			qChot[4].KhoiTao(0, "chot", "4", 2, false, 3, 8);
			qChot[4].imgUnit.setId(15);
			dsQuanCo.add(qChot[4]);
			
			shuffleList(dsQuanCo);
			setPosition();
		} else {
			qTuong.KhoiTao(1, "tuong", "0", 1, true, 9, 4);
			qTuong.imgUnit.setId(16);
			dsQuanCo.add(qTuong);
			
			qSy[0].KhoiTao(1, "sy", "0", 2, true, 9, 3);
			qSy[0].imgUnit.setId(17);
			dsQuanCo.add(qSy[0]);
			
			qSy[1].KhoiTao(1, "sy", "1", 2, true, 9, 5);
			qSy[1].imgUnit.setId(18);
			dsQuanCo.add(qSy[1]);
			
			qTinh[0].KhoiTao(1, "tinh", "0", 2, true, 9, 2);
			qTinh[0].imgUnit.setId(19);
			dsQuanCo.add(qTinh[0]);
			
			qTinh[1].KhoiTao(1, "tinh", "1", 2, true, 9, 6);
			qTinh[1].imgUnit.setId(20);
			dsQuanCo.add(qTinh[1]);
			
			qXe[0].KhoiTao(1, "xe", "0", 2, true, 9, 0);
			qXe[0].imgUnit.setId(21);
			dsQuanCo.add(qXe[0]);
			
			qXe[1].KhoiTao(1, "xe", "1", 2, true, 9, 8);
			qXe[1].imgUnit.setId(22);
			dsQuanCo.add(qXe[1]);
			
			qPhao[0].KhoiTao(1, "phao", "0", 2, true, 7, 1);
			qPhao[0].imgUnit.setId(23);
			dsQuanCo.add(qPhao[0]);
			
			qPhao[1].KhoiTao(1, "phao", "1", 2, true, 7, 7);
			qPhao[1].imgUnit.setId(24);
			dsQuanCo.add(qPhao[1]);
			
			qMa[0].KhoiTao(1, "ma", "0", 2, true, 9, 1);
			qMa[0].imgUnit.setId(25);
			dsQuanCo.add(qMa[0]);
			
			qMa[1].KhoiTao(1, "ma", "1", 2, true, 9, 7);
			qMa[1].imgUnit.setId(26);
			dsQuanCo.add(qMa[1]);
			
			qChot[0].KhoiTao(1, "chot", "0", 2, true, 6, 0);
			qChot[0].imgUnit.setId(27);
			dsQuanCo.add(qChot[0]);
			
			qChot[1].KhoiTao(1, "chot", "1", 2, true, 6, 2);
			qChot[1].imgUnit.setId(28);
			dsQuanCo.add(qChot[1]);
			
			qChot[2].KhoiTao(1, "chot", "2", 2, true, 6, 4);
			qChot[2].imgUnit.setId(29);
			dsQuanCo.add(qChot[2]);
			
			qChot[3].KhoiTao(1, "chot", "3", 2, true, 6, 6);
			qChot[3].imgUnit.setId(30);
			dsQuanCo.add(qChot[3]);
			
			qChot[4].KhoiTao(1, "chot", "4", 2, true, 6, 8);
			qChot[4].imgUnit.setId(31);
			dsQuanCo.add(qChot[4]);
			
			shuffleList(dsQuanCo);
			setPosition();
		}
	}

	public void setPosition() {
		qSy[0].KhoiTaoViTri(qSy[0].Hang, qSy[0].Cot);
		qSy[1].KhoiTaoViTri(qSy[1].Hang, qSy[1].Cot);
		qTinh[0].KhoiTaoViTri(qTinh[0].Hang, qTinh[0].Cot);
		qTinh[1].KhoiTaoViTri(qTinh[1].Hang, qTinh[1].Cot);
		qXe[0].KhoiTaoViTri(qXe[0].Hang, qXe[0].Cot);
		qXe[1].KhoiTaoViTri(qXe[1].Hang, qXe[1].Cot);
		qPhao[0].KhoiTaoViTri(qPhao[0].Hang, qPhao[0].Cot);
		qPhao[1].KhoiTaoViTri(qPhao[1].Hang, qPhao[1].Cot);
		qMa[0].KhoiTaoViTri(qMa[0].Hang, qMa[0].Cot);
		qMa[1].KhoiTaoViTri(qMa[1].Hang, qMa[1].Cot);
		qChot[0].KhoiTaoViTri(qChot[0].Hang, qChot[0].Cot);
		qChot[1].KhoiTaoViTri(qChot[1].Hang, qChot[1].Cot);
		qChot[2].KhoiTaoViTri(qChot[2].Hang, qChot[2].Cot);
		qChot[3].KhoiTaoViTri(qChot[3].Hang, qChot[3].Cot);
		qChot[4].KhoiTaoViTri(qChot[4].Hang, qChot[4].Cot);
		if (this.Phe == 0) {
			qTuong.KhoiTaoViTri(0, 4);
			qTuong.TrangThai = 1;
		} else {
			qTuong.KhoiTaoViTri(9, 4);
			qTuong.TrangThai = 1;
		}
	}

	public void shuffleList(ArrayList<QuanCo> dsQuanCo) {
		int n = dsQuanCo.size();
		Random random = new Random();
		random.nextInt();
		for (int i = 1; i < n; i++) {
			int change = i + random.nextInt(n - i);
//			Log.d("shuff", i + "/" + change + "/" + dsQuanCo.get(i).TenQuanChuaLat + "/" + dsQuanCo.get(change).TenQuanChuaLat);
			swap(dsQuanCo, i, change);
		}
	}

	private void swap(ArrayList<QuanCo> dsQuanCo, int i, int change) {
		
		int tempHang = dsQuanCo.get(i).Hang;
		dsQuanCo.get(i).Hang = dsQuanCo.get(change).Hang;
		dsQuanCo.get(change).Hang = tempHang;
		
		int tempCot = dsQuanCo.get(i).Cot;
		dsQuanCo.get(i).Cot = dsQuanCo.get(change).Cot;
		dsQuanCo.get(change).Cot = tempCot;
		
		String tempTenCL = dsQuanCo.get(i).TenQuanChuaLat;
		dsQuanCo.get(i).TenQuanChuaLat = dsQuanCo.get(change).TenQuanChuaLat; 
		dsQuanCo.get(change).TenQuanChuaLat = tempTenCL;
		
		String tempThuTuCL = dsQuanCo.get(i).ThuTuChuaLat;
		dsQuanCo.get(i).ThuTuChuaLat = dsQuanCo.get(change).ThuTuChuaLat; 
		dsQuanCo.get(change).ThuTuChuaLat = tempThuTuCL;
		
		
	}
	
	public void ResetPlayer() {
		dsQuanCo = new ArrayList<QuanCo>();
		qTuong = new Tuong();
		qSy[0] = new Sy();
		qSy[1] = new Sy();
		qTinh[0] = new Tinh();
		qTinh[1] = new Tinh();
		qXe[0] = new Xe();
		qXe[1] = new Xe();
		qPhao[0] = new Phao();
		qPhao[1] = new Phao();
		qMa[0] = new Ma();
		qMa[1] = new Ma();
		qChot[0] = new Chot();
		qChot[1] = new Chot();
		qChot[2] = new Chot();
		qChot[3] = new Chot();
		qChot[4] = new Chot();
	}
}
